package com.snail.ron.design.singleton;

import java.util.Date;

/**
 * @author xueguoping
 * @desc: TODO 枚举
 * 枚举，不是很常见的一种写法。很简洁的一种实现方式，提供了序列化机制，保证线程安全，绝对防止多次实例化，即使是在面对复杂的序列化或者反射攻击的时候。
 *
 * 总结：线程安全、非懒加载、效率高
 *
 *是否推荐适用：推荐使用、《Effective Java》作者Joshua Bloch推荐适用的方式
 *
 * 对比
 *  方式          优点          缺点
 *  饿汉      线程安全、效率高    非懒加载
 *  懒汉      线程安全、懒加载    效率低
 *  DCL  线程安全、懒加载、效率高   无
 *  静态内部类 线程安全、懒加载、效率高 无
 *  枚举      线程安全、效率高    非懒加载
 *
 *  枚举有缺点，为什么Joshua Bloch还推荐适用枚举？
 *  因为普通的单列模式是可以通过反射和序列化反序列化来破解的，而Enum由于自身的特性问题，是无法破解的。
 *  当然，由于这种情况基本不会出现，因此我们在适用单例模式的时候比较少考虑这个问题。
 * @date 2022/4/1119:39
 */
public enum SingletonFive {
    INSTANCE;

    private Date birthDay;

    public Date getBirthDay(){
        return birthDay;
    }

    public void setBirthDay(Date birthDay){
        this.birthDay = birthDay;
    }

    public static SingletonFive getInstance(){
        return INSTANCE;
    }
}
